package de.nak.terminumfrageapp.model;

import java.io.Serializable;
import java.util.Date;
import java.util.Set;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;

import org.hibernate.annotations.Type;

/**
 * 
 * @description Object Klasse Umfrage
 * @author Cornelia Kugler, Inga Brinkmann, Tim Danker
 * 
 */

@Entity
@Table(name = "TERMIN")
public class Termin implements Serializable {
	/** The serial version UID. */
	private static final long serialVersionUID = 1L;
	/** The identifier. */
	private Long id;
	/** Datum */
	private Date datum;
	/** Uhrzeit */
	private Date uhrzeit;
	/** Umfrage */
	private Umfrage umfrage;
	/** Inital flag */
	private boolean terminInitial;
	/** Set von Rueckmeldungen */
	private Set<Rueckmeldung> rueckmeldungen;

	@OneToMany(mappedBy = "termin")
	public Set<Rueckmeldung> getRueckmeldungen() {
		return rueckmeldungen;
	}

	public void setRueckmeldungen(Set<Rueckmeldung> rueckmeldungen) {
		this.rueckmeldungen = rueckmeldungen;
	}

	public boolean isTerminInitial() {
		return terminInitial;
	}

	public void setTerminInitial(boolean terminInitial) {
		this.terminInitial = terminInitial;
	}

	@Type(type = "date")
	public Date getDatum() {
		return datum;
	}

	public void setDatum(Date datum) {
		this.datum = datum;
	}

	@Type(type = "time")
	public Date getUhrzeit() {
		return uhrzeit;
	}

	public void setUhrzeit(Date uhrzeit) {
		this.uhrzeit = uhrzeit;
	}

	@ManyToOne
	@JoinColumn(name = "UMFRAGE_ID")
	public Umfrage getUmfrage() {
		return umfrage;
	}

	public void setUmfrage(Umfrage umfrage) {
		this.umfrage = umfrage;
	}

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	public Long getId() {

		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	/**
	 * ordnet dem Termin eine Rueckmeldung zu.
	 * 
	 * @param die
	 *            zuzuordnende Rueckmeldung
	 */
	public void rueckmeldungZuordnen(Rueckmeldung rueckmeldung) {

		if (rueckmeldung == null) {
			throw new IllegalArgumentException();
		}
		if (this.equals(rueckmeldung.getTermin())) {
			return;
		}
		if (rueckmeldung.getBenutzer() != null) {
			rueckmeldung.getTermin().getRueckmeldungen().remove(rueckmeldung);
		}
		rueckmeldung.setTermin(this);
		this.rueckmeldungen.add(rueckmeldung);
	}

}